package vue.affectation;

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Vector;
import javax.swing.JComboBox;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.TitledBorder;
import metier.AffectEleve;
import metier.Eleve;
import metier.Grade;
import metier.Stage;
import vue.commun.JPanJTable;
import vue.commun.JPanRechercherEleve;
import vue.eleve.RechercherEleve;
import configuration.MessageAppli;
import ctr.affectation.GestSuppAffectation;
import ctr.commun.CommunGest;

public class JPanSuppAffectation extends RechercherEleve{
	private static final long serialVersionUID = 1L;
	private JTextField jTFNomEleve, jTFPrenomEleve;
	private JTextField jTFRechercheNomEleve, jTFRecherchePrenomEleve, jTFDateDebutAff, jTFDateFinAff;
	private JComboBox jCBGradeEleve, jCBAffectation;
	private JComboBox jCBStage, jCBRechercheEleve;
	private JTextField jTFDateNaissanceEleve;
	private String titre;
	private Eleve eleve=null;
	private JPanJTable panJTable;
	ArrayList<AffectEleve> listeAffectEleve=null;

	
	public JPanSuppAffectation(JPanSuppAffectation jPanSuppAffectation) {
		this.eleve = jPanSuppAffectation.getEleve();
		afficher();
	}
	
	public JPanSuppAffectation(String titre) {
		this.titre = titre;
		afficher();
	}
	
	/**
	 * Constructeur de base.
	 * Integration du panel rechercher
	 * @param titre
	 */
	public void afficher() {
		this.setBorder(new TitledBorder(titre));
		// Instanciation pour recuperer les objets en bases.
		// Oblige a passer par la couche controle pour acceder aux metiers.
		CommunGest communGest = new CommunGest();
		
		// Recuperation de la liste des stages.
		ArrayList<Stage> lStage = communGest.getListeStage();
		
		if ( !lStage.isEmpty())
		{
			//Creation du pannel de saisie pour la recherche
			JPanRechercherEleve jPanRechercherEleve = new JPanRechercherEleve(this);
			
			//Ajout du panel de recherche dans le panel Modifier eleve
			this.setLayout(new BorderLayout(2,1));
			this.add(jPanRechercherEleve, BorderLayout.NORTH);
			
			if(this.eleve!=null)
			{
				// Ajout du panel de modification.
				this.add(partieModif(), BorderLayout.CENTER);
			}
		}
		else
		{
			JOptionPane.showMessageDialog(this, MessageAppli.MSG_STAGE_AUCUN_STAGE + ", ajout d'eleve impossible.", MessageAppli.MSG_ERREUR_TITRE, JOptionPane.WARNING_MESSAGE);
		}
	}
	
	/**
	 * Partie modification
	 * @param lStage
	 * @return
	 */
	private JPanel partieModif(){
		CommunGest communGest = new CommunGest();
		//String libelleGrade = communGest.getGrade(this.getEleve().getIdGrade()).getLibelleGrade();
		this.listeAffectEleve = communGest.getListeAffectEleve(eleve.getIdEleve());
		Grade grade = communGest.getGrade(eleve.getIdGrade());
		
		JPanel panModif = new JPanel(new GridLayout(2,1));
		panModif.setBorder(new TitledBorder("Modifier une affectation"));
		
		JPanel panListeAffect = new JPanel();
			
		//Nom des colonnes
		Vector<Object> nomColonne= new Vector<Object>(Arrays.asList(new String[] {"Affectation", "Date de debut", "Date de fin"}));
		
		//Valeurs des lignes
		Vector<Vector<Object>> dataVector= new Vector<Vector<Object>>();
		
		//Recuperation  des eleves.
		if ( listeAffectEleve != null && !listeAffectEleve.isEmpty())
		{
			for (AffectEleve affectEleve : listeAffectEleve)
			{
				//Creation d'un vector par eleve.
				dataVector.add(affectEleve.getVector());
			}
		}
		
		String titre = "Affectation du : " + grade.getAbrev() + " " + eleve.getNomEleve() + " " + eleve.getPrenom();
		this.panJTable = new JPanJTable(titre, dataVector, nomColonne, null);
		panJTable.getJtable().setAutoCreateRowSorter(true);
		panJTable.getJtable().addMouseListener(new GestSuppAffectation(this));
		
		panListeAffect.add(panJTable);
		
		panModif.add(panListeAffect);
		
		return panModif;
	}
	
	public ArrayList<AffectEleve> getListeAffectEleve() {
		return listeAffectEleve;
	}
	
	public JPanJTable getJPanJTable() {
		return this.panJTable;
	}
	
	public JTextField getJTFDateDebutAff() {
		return jTFDateDebutAff;
	}
	
	public JTextField getJTFDateFinAff() {
		return jTFDateFinAff;
	}
	
	public JComboBox getJCBStage() {
		return jCBStage;
	}
	
	public JComboBox getJCBGrade() {
		return jCBGradeEleve;
	}
	
	public JComboBox getJCBAffectation() {
		return jCBAffectation;
	}

	public JTextField getJTFNomEleve() {
		return jTFNomEleve;
	}

	public JTextField getJTFPrenomEleve() {
		return jTFPrenomEleve;
	}

	public JComboBox getCBGradeEleve() {
		return jCBGradeEleve;
	}

	public JTextField getJTFDateNaissanceEleve() {
		return jTFDateNaissanceEleve;
	}

	public JComboBox getCBStage() {
		return jCBStage;
	}

	public JTextField getJTFRechercheNomEleve() {
		return jTFRechercheNomEleve;
	}

	public JTextField getJTFRecherchePrenomEleve() {
		return jTFRecherchePrenomEleve;
	}

	public JComboBox getCBRechercheStage() {
		return jCBRechercheEleve;
	}

	public String getTitre() {
		return titre;
	}
	
	public JComboBox getCBAffectation() {
		return jCBAffectation;
	}

	@Override
	public Eleve getEleve() {
		return this.eleve;
	}

	@Override
	public void setEleve(Eleve eleve) {
		this.eleve = eleve;
		
	}
	
	@Override
	public JPanel init(){
		return new JPanSuppAffectation(this);
	}
}